package DuoTai2;
import java.security.PublicKey;
abstract class Shape {//抽象类
    //包是放一堆类的单位，一个包中平行许多类
    public int a = 10;
    public void test() {
        System.out.println("抽象类里的非静态方法");
    }
    public static void test2() {
        System.out.println("抽象类里的静态方法");
    }
    public Shape() {
        //抽象类的构造方法只能在间接实例化执行，让子类里的构造方法里的父类构造方法调用
        a = 20;
        System.out.println("抽象类的构造方法");
    }
    public abstract void draw();//抽象方法
}
abstract class A extends Shape {//合并成一个更大的抽象类，这个合并后的子类也是抽象类
    public abstract void test();//原子类的抽象方法
}
class B extends A {
    @Override
    public void draw() {//子类里的重写方法
    }
    @Override
    public void test() {
    }
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("❀");
    }
}

public class DuoTai2 {
    public static void drawMap(Shape shape) {//父类类变量似复刻变量形参
        shape.draw();
    }

    public static void main(String[] args) {
        Shape shape = new Rect();//赋值接转向上转型
        drawMap(shape);//与drawMap同类可直接调用
        drawMap(new Rect());//匿名对象，没有名字的对象，每次使用都得重新实例化一个新的
        drawMap(new Flower());
        Rect rect = new Rect();
        rect.draw();
        rect.draw();
        new Rect().draw();
        new Rect().draw();
    }
}
